package jukebox.model.musiccomment;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import jukebox.model.common.CommentVO;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

/**
 * @author : 김준섭
 * @since : 2014-06-20
 * @comment : 음악 댓글의 DB처리를 위한 영속성 클래스 
 */
@Repository
public class MusicCommentDAOImpl implements MusicCommentDAO {
	@Resource
	private SqlSessionTemplate sqlSessionTemplate;
	
	/**
	 * @method : writeComment
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : Map map - 등록할 음악 댓글의 정보
	 * 							댓글 정보를 저장하는 CommentVO와
	 * 							댓글이 달릴 게시물번호 boardNo가 저장되있다. 
	 * @return : void
	 * @comment : 음악게시물의 댓글 추가하기 위한 함수 
	 */
	@Override
	public void writeComment(CommentVO mcvo) {
		sqlSessionTemplate.insert("musiccomment.writeComment", mcvo);
	}

	/**
	 * @method : updateComment
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : CommentVO mcvo - 수정될 음악 댓글 정보
	 * @return : void
	 * @comment : 음악 댓글을 수정하기 위한 함수 
	 */
	@Override
	public void updateComment(CommentVO mcvo) {
		sqlSessionTemplate.update("musiccomment.updateComment", mcvo);
	}

	/**
	 * @method : deleteCommentbyNo
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : int commentNo - 삭제될 음악 댓글 번호
	 * @return : void
	 * @comment : 음악 댓글을 삭제하기 위한 함수 
	 */
	@Override
	public void deleteCommentbyNo(int commentNo) {
		sqlSessionTemplate.delete("musiccomment.deleteCommentbyNo", commentNo);
	}

	/**
	 * @method : getAllCommentCount
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : int boardNo - 검색할 게시물 번호
	 * @return : int - 댓글의 총 갯수
	 * @comment : 게시물의 댓글 총 갯수를 검색하기 위한 함수 
	 */
	@Override
	public int getAllCommentCount(int boardNo) {
		return sqlSessionTemplate.selectOne("musiccomment.getAllCommentCount", boardNo);
	}

	/**
	 * @method : findCommentListPerPage
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : Map map - 한 페이지의 게시물을 검색하기 위한 정보
	 * 							페이지 정보를 담은 PagingBean과 
	 * 							게시물 번호 정보인 boardNo가 담겨있다.
	 * @return : List<CommentVO> - 한 페이지의 댓글 리스트
	 * @comment : 한 페이지의 댓글 정보 리스트를 검색하기위한 함수
	 */
	@Override
	public List<CommentVO> findCommentListPerPage(Map map) {
		return sqlSessionTemplate.selectList("musiccomment.findCommentListPerPage", map);
	}
	
	/**
	 * @method : findCommentListByBoardNo
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : int no - 게시물 번호
	 * @return : List<CommentVO> - 게시물의 전체 댓글 정보
	 * @comment : 게시물에 해당하는 전체 댓글을 검색하기 위한 함수
	 */
	@Override
	public List<CommentVO> findCommentListByBoardNo(int no) {
		return sqlSessionTemplate.selectList("musiccomment.findCommentListByBoardNo", no);
	}
	
	/**
	 * @method : findCommentByCommentNo
	 * @author : 김준섭
	 * @since : 2014-06-26
	 * @param : int no - 검색할 댓글 번호
	 * @return : CommentVO - 댓글 정보
	 * @comment : 댓글 번호를 검색하여 댓글 정보를 가져오기 위한 함수
	 */
	@Override
	public CommentVO findCommentByCommentNo(int no) {
		return sqlSessionTemplate.selectOne("musiccomment.findCommentByCommentNo", no);
	}

}
